/**
 * @package Infinity-Seed
 *
 * @copyright Copyright (C) 2012-2013 Exia.CESI
 * @author Paul MAGNIN, Arthur MERCIER, Jordan RICHET, Cyril SCHUMACHER
 */
package infinity.seed;

/**
 * Etats des cellules.
 * @author Cyril SCHUMACHER <cyril.schumacher at viacesi.fr>
 */
public class CellState {
    // <editor-fold defaultstate="collapsed" desc="Attributs.">
    /**
     * Les attributs ci-dessous sont déclarés comme "final" : la valeur ne doit être changé lors
     * de l'exécution du programme (elles sont constantes)
     * et "static" pour pouvoir utiliser les attributs sans instancier cette classe.
     */
    /**
     * Vide.
     */
    public final static int EMPTY = 0;
    
    /**
     * Jeune pousse.
     */
    public final static int SEED = 1;
    
    /**
     * Jeune pousse en feu.
     */
    public final static int SEED_INFIRED = 10;
    
    /**
     * Jeune pousse infecté.
     */
    public final static int SEED_INFECTED = 11;
    
    /**
     * Arbuste.
     */
    public final static int BUSH = 2;
    
    /**
     * Jeune pousse en feu.
     */
    public final static int BUSH_INFIRED = 20;
    
    /**
     * Jeune pousse infecté.
     */
    public final static int BUSH_INFECTED = 21;
    
    
    /**
     * Arbuste +1.
     */
    public final static int BUSH_1 = 4;
    
    /**
     * Arbuste +1 en feu.
     */
    public final static int BUSH_INFIRED_1 = 40;
    
    /**
     * Arbuste +1 infecté.
     */
    public final static int BUSH_INFECTED_1 = 41;
    
    /**
     * Arbre.
     */
    public final static int TREE = 3;
    
    /**
     * Jeune pousse en feu.
     */
    public final static int TREE_INFIRED = 30;
    
    /**
     * Jeune pousse infecté.
     */
    public final static int TREE_INFECTED = 31;
    
    /**
     * En cendre.
     */
    public final static int ASHED = 5;
    
    /**
     * Est infecté.
     */
    public final static int INFECTED = 6;
    
    /**
     * En feu.
     */
    public final static int INFIRED = 7;
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Méthodes.">
    /**
     * Récupère la valeur selon un nom d'attribut.
     * @param name Nom de l'attribut.
     * @return Retourne la valeur de l'attribut, 0 si l'attribut n'existe pas.
     * @see <a href="http://docs.oracle.com/javase/tutorial/reflect/member/fieldTypes.html">Obtaining Field Types</a>
     */
    public static int getValue(String name) {
        try {
            // Utilise la "réflection" pour obtenir la valeur d'un l'attribut selon son nom.
            // La réflection permet d'examiner ou de modifier le code dynamiquement.
            java.lang.reflect.Field field = CellState.class.getField(name.toUpperCase());
            return field.getInt(null);
        } catch (IllegalAccessException | NoSuchFieldException e) {
            return 0;
        }
    }
    // </editor-fold>
}
